/**
 * 猪哥亮开源
 * 作者 猪哥亮
 * 邮箱 1030681978@qq.com
 */
package cn.jnetty.ioc.ann;

import cn.jnetty.ioc.ann.config.AnnotationWrapper;
import cn.jnetty.ioc.cons.AnnotationMap;
import cn.jnetty.ioc.factorys.DefaultListableBeanFactory;
import cn.jnetty.ioc.factorys.support.GenericBeanDefinition;

import java.lang.annotation.Annotation;
import java.lang.reflect.Modifier;

/**
 * @author 猪哥亮
 * @email 1030681978@qq.com
 * @date 2020/7/6 16:49
 * 描述： 
 *
 */
public class GenericBeanDefinitionWrapper {
    /**
     * 传入一个Class获取其所有注解
     * @param klass
     */
    public void wrapper(Class<?> klass,DefaultListableBeanFactory beanFactory){
// 接口、内部类、枚举、注解和匿名类 直接忽略
        if (klass.isInterface() || klass.isMemberClass() || klass.isEnum() || klass.isAnnotation() || klass.isAnonymousClass()) {
            return;
        }
        // 抽象类和非Public的也忽略
        int modify = klass.getModifiers();
//        if (Modifier.isAbstract(modify) || (!Modifier.isPublic(modify))) {
//            return;
//        }
        GenericBeanDefinition definition = new GenericBeanDefinition();
        definition.setAbstract(Modifier.isAbstract(modify));
        definition.setBeanClass(klass);
        definition.setBeanClassName(klass.getName());
        for (Annotation annotation : klass.getAnnotations()) {
            Class<? extends Annotation> annotationType = annotation.annotationType();
            if(!AnnotationMap.containsKeyClassAnn(annotationType)){
                continue;
            }
            //component,service,controller,laze,scop,configuration,enablexxx
            AnnotationWrapper classAnnByClass = AnnotationMap.getClassAnnByClass(annotationType);
            if(classAnnByClass != null){
                classAnnByClass.wrapper(definition);
            }
        }
    }
}
